class Solution {
public:
    bool match(const char* s, const char* p)
    {
        if(p[0] == '\0')
            return s[0] == '\0';

        if(p[1] == '*')
        {
            while(s[0] && (p[0]=='.' || p[0]==s[0]))
            {
                if(match(s,p+2))
                    return true;
                s++;
            }
            return match(s, p+2);
        }
        else
        {
            if(s[0] && (p[0]==s[0] || p[0]=='.'))
                return match(s+1, p+1);
            return false;
        }
    }

    bool isMatch(string s, string p) {
        return match(s.c_str(), p.c_str());
    }
};